//开发板 ESP32 Dev Moudle  FreeRTOS使用案例



//#include "freertos/FreeRTOS.h"
//#include "freertos/task.h"
//#include "driver/dac.h"
//#include <Arduino.h>
 
//TaskHandle_t *tesk1;
 
//void loop(){/* 留空 */}
//void setup() {
    //Serial.begin(115200);
    //Serial.print("core count:");
    //Serial.println(portNUM_PROCESSORS);//输出可用的核心数量，应是2
    
    //dac_output_enable(DAC_CHANNEL_2);//启用2号DAC输出引脚(GPIO26),上面插了个led
 
    ////创建任务
    ////核心0上
    //xTaskCreatePinnedToCore(
        //Task1_blink,        //任务对应的函数
        //"blink",            //任务名
        //1024,                //栈大小。(This stack size can be checked & adjusted by reading the Stack Highwater)
        //NULL,                //传给任务函数的参数
        //2,                    //任务优先级。(Priority, with 3 (configMAX_PRIORITIES - 1) being the highest, and 0 being the lowest.)
        //tesk1,                //用来返回任务handle
        //0                    //指定CPU核心,tskNO_AFFINITY表示不指定，数字代表核心ID
    //);
    ////核心1上
    //xTaskCreatePinnedToCore(Task2_print,"print",1024,NULL,1,NULL ,1);
    ////不指定核心
    //xTaskCreatePinnedToCore(Task3_Print,"print2",1024,NULL,2,NULL ,tskNO_AFFINITY);//一个核心上也可以设置多个任务
    ////不指定核心等同于直接使用xTaskCreate来创建任务
    //// xTaskCreate(Task3_Print,"print2",1024,NULL,2,NULL);
    
//}
///*---------------------- 定义任务 ---------------------*/
//void Task1_blink(void *pvParameters)  // This is a task.
//{
    //static float i=0;
    //for (;;) //任务不能自己执行结束，否则会造成崩溃，需要在任务中调用vTaskDelete删除
    //{
        //double level=177.0+sin(i++/180.0)*77.0;//计算一个亮度
        //dac_output_voltage(DAC_CHANNEL_2, level);//从DAC引脚输出电压来调整灯的亮度
        //vTaskDelay(5);//任务内延时，单位毫秒，不会影响同核心的其他任务
        //if(i==1000){//任务执行1000次后删除(差不多是一个亮暗周期)，灯将保持熄灭
             //vTaskDelete(tesk1);  //删除任务，参数为NULL时表示删除当前执行的任务
        //}
    //}
//}
//void Task2_print(void *pvParameters){

    //for (;;){
        //Serial.println("task2");
        //vTaskDelay(500);//延时半秒，即使一个任务不延时似乎也并不会阻塞同核心的其它任务
        //// delay(500);//我试了一下，直接用delay效果是一样的
    //}
//}
//void Task3_Print(void *pvParameters){
    //for (;;){
        //Serial.println(xPortGetCoreID());//输出当前任务所在核心的id
        //vTaskDelay(100);//延时100ms
    //}
//}
